// PROGRAMA : SCRPA001
// SISTEMA : SISP - SISTEMA DE INFORMACOES DE SEGURANCA PUBLICA
// IDENTIFICACAO CRIMINAL
// BIBLIOTECA : SISP
// CLIENTE : GEJUSPC - GERENCIA DE ESTADO DA JUSTICA, SEGURANCA
// PUBLICA E CIDADANIA / INSTITUTO DE IDENT.
// OBJETIVO : Muda STATUS do Registro Criminal, quando deletado
// POR ENGANO
// DATA : 9/08/2005
// ALTERACAO :

package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.util.Arrays;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrm111a;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrma001;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrpa001A;
import br.com.vti.sisp_sicrim.antigo.model.SicCadastro;
import br.com.vti.sisp_sicrim.antigo.model.SicSenha;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Scrg001;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Scrpa001 OBJETIVO : Muda STATUS do Registro Criminal, quando deletado POR ENGANO *
 * 
 * @author Incode - Data: mai/2014
 * 
 */

@Resource
@Path("/antigo/scrpa001")
public class Scrpa001 {
	Scrpa001 scrpa001Anterior;
	// Views utilizadas
	SicCadastro criminalView = new SicCadastro();
	SicSenha senhaView = new SicSenha();
	// Telas/relatorios utilizados
	Scrm111a scrm111a;
	Scrma001 scrma001;
	Scrpa001A scrpa001A;
	// Includes utilizados
	// Areas globais / session
	Scrg001 scrg001; // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;

	private int jDataIni = 0;
	private long jReg_geral = 0;
	private int jData_nasc = 0;
	private String[][] dedos = new String[6][3];
	// private String[] jAlcunha = new String[5];
	// private String[] jObservacoes = new String[5];
	// private int jMatricula = 0;
	private String jDataDig = "";

	private String faseproc = "0";
	private int nroReg = 1;

	private Scrma001 preMapas() {
		int ind;
		scrm111a = new Scrm111a(true, sessao);
		scrma001 = new Scrma001(true, sessao);
		scrpa001A = new Scrpa001A(true, sessao);
		Arrays.fill(dedos, "");
		for (ind = 1; ind <= 4; ind++) {
			scrm111a.setJobservacoes(ind, "");
			scrm111a.setJalcunha(ind, "");
		}
		scrma001.setDataCorrente(UtilBean.inverteDataCorrente());
		// RELATORIO

		sessao.getScrg001().setWProgramaw(this.getClass().getSimpleName());
		sessao.getScrg001().setWFuncaow("MUDASTATUS-(IN,AL,EX)");
		sessao.getScrg001().setWVltw(8);
		return scrma001;
	}

	public Scrpa001(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Scrm111a scrm111a, Scrma001 scrma001, Scrpa001A scrpa001A) {
		try {
			main(scrm111a, scrma001, scrpa001A);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroScrcerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Scrm111a pscrm111a, Scrma001 pscrma001, Scrpa001A pscrpa001A) {
		if (pscrm111a == null && pscrma001 == null && pscrpa001A == null) {
			primeiraVez = true;
			scrma001 = preMapas();
			scrma001.setNavegar("../scrpa001/executar");
			result.include("scrma001", scrma001);
			sessao.setAtributo("Scrpa001", this);
			scrma001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pscrm111a, pscrma001, pscrpa001A);
		}

		switch (faseproc) {
		case "0": {
			scrma001.receberTela(false, result);
			criminalView.pesquisaRegEstadualGeral(jReg_geral);
			if (criminalView.registrosProcessados() == 0) {
				scrma001.enviarMensagem("", "                   NENHUMA FICHA CRIMINAL FOI ENCONTRADA");
				result.include("scrma001", scrma001);
				sessao.setAtributo("Scrpa001", this);
				scrma001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			criminalView.fecha();
			faseproc = "1";
		}
		case "1": {
			scrma001.receberTela(false, result);
			for (int ind = 1; ind <= nroReg && criminalView.pesquisaRegEstadualGeral(jReg_geral); ind++)
				;
			if (criminalView.registrosProcessados() < nroReg) {
				break;
			}
			nroReg++;
			if (criminalView.getStatusReg() != 5) {
				scrma001.enviarMensagem(null, "Ficha Criminal nao tem status de exclusao �EX�");
				result.include("scrma001", scrma001);
				sessao.setAtributo("Scrpa001", this);
				scrma001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			// Recupera os Dados
			scrma001.setJregGeral(criminalView.getRegEstadualGeral());
			scrm111a.setJnomecompleto(criminalView.getNomeCompleto());
			scrm111a.setJmae(criminalView.getNomeMae());
			jData_nasc = criminalView.getDataNasc();
			scrm111a.setJaanasc(String.valueOf(UtilBean.extraiDigitos(jData_nasc, 8, 0, 4)));
			scrm111a.setJmmnasc(String.valueOf(UtilBean.extraiDigitos(jData_nasc, 8, 4, 2)));
			scrm111a.setJddnasc(String.valueOf(UtilBean.extraiDigitos(jData_nasc, 8, 6, 2)));
			scrm111a.setJpai(criminalView.getNomePai());
			scrm111a.setJalcunha(criminalView.getApelidoAlcunhas());
			scrm111a.setJnatural(criminalView.getNaturalidade());
			scrm111a.setJcodmunnascimento(criminalView.getCodigoMunicipioNasc());
			scrm111a.setJufnascimento(criminalView.getUfNaturalidade());
			scrm111a.setJocorrencia(1);
			scrm111a.setJobservacoes(criminalView.getObservacao());
			jDataDig = String.valueOf(criminalView.getDataDocAtu());
			scrm111a.setJanodig(UtilBean.subStr(jDataDig, 0, 4));
			scrm111a.setJmesdig(UtilBean.subStr(jDataDig, 4, 2));
			scrm111a.setJdiadig(UtilBean.subStr(jDataDig, 6, 2));
			scrm111a.setJmatricula(criminalView.getMatriculaFuncAtu());
			scrm111a.setJhorario(criminalView.getHoraAtu());
			// MOVE
			jDataIni = Integer.valueOf(jDataDig);
			// Par�grafo: fd2()
			senhaView.consultaMatricula(scrm111a.getJmatricula());

			scrm111a.setJnomedigitador(senhaView.getNome());
			senhaView.fecha();

			scrm111a.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
			result.include("scrm111a", scrm111a);
			sessao.setAtributo("Scrpa001", this);
			faseproc = "2";
			scrm111a.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}
		case "2": {
			for (int ind = 1; ind < nroReg && criminalView.pesquisaRegEstadualGeral(jReg_geral); ind++)
				;
			scrm111a.receberTela(false, result);

			// scrpa001A.enviarReceberTela(false, result);
			if (!((UtilBean.funcao.equals(UtilBean.ctt_retorna) || UtilBean.funcao.equals(UtilBean.ctt_processa)))) {
				scrm111a.enviarMensagem(null, "Tecla invalida");
				result.include("scrma001", scrma001);
				sessao.setAtributo("Scrpa001", this);
				scrma001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			if (!((scrpa001A.getJconf().equals("S") || scrpa001A.getJconf().equals("N")))) {
				scrm111a.enviarMensagem(null, "Confirmacao invalida");
				result.include("scrma001", scrma001);
				sessao.setAtributo("Scrpa001", this);
				scrma001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			if (scrpa001A.getJconf().equals("N")) {
				// dao.rollback();
				UtilBean.mensagemTexto("STATUS NAO ALTERADO", criminalView.getTipoReg());
				result.include("scrma001", scrma001);
				sessao.setAtributo("Scrpa001", this);
				scrma001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			} else {
				criminalView.setStatusReg(1);
				criminalView.setTipoReg("IN");
				criminalView.atualiza();
				// dao.commit();
				scrma001.enviarMensagem("", "STATUS ALTERADO=" + criminalView.getTipoReg());
				sessao.setAtributo("Scrpa001", this);
				result.include("scrma001", scrma001);
				scrma001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				faseproc = "1";
				return;
			}

		}
		}
		scrma001.receberTela(false, result);
		sessao.setAtributo("Scrpa001", this);
		result.include("scrma001", scrma001);
		scrma001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
	}

	private void restaurarEstados(Scrm111a pscrm111a, Scrma001 pscrma001, Scrpa001A pscrpa001A) {
		this.scrpa001Anterior = (Scrpa001) sessao.getAtributo("Scrpa001");
		if (pscrm111a != null) {
			scrm111a = pscrm111a;
		} else {
			scrm111a = this.scrpa001Anterior.scrm111a;
		}
		scrm111a.setSessao(sessao);
		if (pscrma001 != null) {
			scrma001 = pscrma001;
		} else {
			scrma001 = this.scrpa001Anterior.scrma001;
		}
		scrma001.setSessao(sessao);
		if (pscrpa001A != null) {
			scrpa001A = pscrpa001A;
		} else {
			scrpa001A = this.scrpa001Anterior.scrpa001A;
		}
		scrpa001A.setSessao(sessao);
		this.faseproc = this.scrpa001Anterior.faseproc;
	}

}
